require "jogador.lua"
require "class.lua"
require "objetoFixo.lua"
require "objetoMovel.lua"
require "editor.lua"
require "constantes.lua"

function love.load()
	text = ""
	posicaoCamera = 0;		
	
	--inicia os graficos
	love.graphics.setBackgroundColor(104, 136, 248)
	love.graphics.setMode(LARGURA_TELA, ALTURA_TELA, false, false, 0)

	--inicia o mundo
	world = love.physics.newWorld(LARGURA_MUNDO,ALTURA_MUNDO)
	world:setGravity(0, GRAVIDADE)
	world:setMeter( METRO )
	
	--cria os vetores que irao comter os objetos do jogo
	jogadores = {}
	objetosMoveis = {}
	objetosFixos = {}

	editor()
	

end


function love.update(dt)
	world:update(dt) --atualiza o mundo
	editorUpdate()
end

function love.draw()

	editorDraw()
end

function leitorLeveis()
	fileL = love.filesystem.newFile(FILENAMEL)
	fileL:open('r')
	temp = 0
	temp1 = 0
	iterator = fileL:lines()
	while true do
		tipoObjeto = fileL:read(2)
		fileL:read(1)
		
		posicaoX = parserNumero( fileL )
		posicaoY = parserNumero( fileL )
		largura = parserNumero( fileL )
		altura = parserNumero( fileL )
		peso = parserNumero( fileL )
		torque = parserNumero( fileL )
		textura = parserNumero( fileL ) 

		nomeObjeto = fileL:read(3)
		
		if tipoObjeto == "OF" then
			objetosFixos[table.getn(objetosFixos) + 1] = objetoFixo:new( nomeObjeto,posicaoX,posicaoY,largura,altura,textura )						
			objetosFixos[table.getn(objetosFixos)]:setColData(objetosFixos[table.getn(objetosFixos)])
		elseif tipoObjeto == "OM" then
			objetosMoveis[table.getn(objetosMoveis) + 1] = objetoMovel:new( nomeObjeto,posicaoX,posicaoY,largura,altura,peso,torque,textura )
			objetosMoveis[table.getn(objetosMoveis)]:setColData(objetosMoveis[table.getn(objetosMoveis)])
		elseif tipoObjeto == "JO" then
			jogadores[table.getn(jogadores) + 1] = jogador:new("jogador","up","down","left","right",posicaoX,posicaoY,24,24,10)
			jogadores[table.getn(jogadores)]:setColData(jogadores[table.getn(jogadores)])
		end
		
		
		
		if (not iterator()) then
			break
		end
	end
	fileL:close()
end

function parserNumero( fileL )
	pontoFlutuante = false
	temp = 0
	temp1 = 0
	temp2 = 10
	while true do
		temp1 = fileL:read(1)
		if ( (pontoFlutuante) and (not isDigit(temp1) ) ) then
			break
		end
		
		if( not(pontoFlutuante) and (not isDigit(temp1) ) and (temp1 ~= ".") ) then
			break
		end
		
		if( temp1 == "." )then
			pontoFlutuante = true
			temp1 = fileL:read(1)
			if not ifDigit(temp1) then
				break
			end
		end		
		
		if ( not pontoFlutuante ) then
			temp = temp*10+temp1
		else
			temp = temp+temp1/temp2
			temp2 = temp2 * 10
		end
	end
	return temp
end

function isDigit( n )
	if n == "0" or n == "1" or n == "2" or n == "3" or n == "4" or n == "5" or n == "6" or n == "7" or n == "8" or n == "9" then
		return true
	else
		return false
	end
end
